import store from "@/store/index.js";
import {
	HTTP_REQUEST_URL,HEADER
} from "@/config/app.js";
import Request from "@/uni_modules/uview-ui/libs/luch-request/index.js";
import CryptoJS from "crypto-js";

var KEY_STR = "544e864796f05937"; // 从环境变量获取AES密钥，如果没有则使用默认值
function decrypt(encryptedData) {
	const key = CryptoJS.enc.Utf8.parse(KEY_STR);
	const parts = encryptedData.split("::");
	const ivVal = parts[0];
	const value = parts[1];
	// 2.偏移量准备(偏移量是可选的,iv称为初始向量,不同的iv加密后的字符串不同,iv也必须是16位十六进制数)
	const iv = CryptoJS.enc.Base64.parse(ivVal);
	const src = CryptoJS.enc.Base64.parse(value);
	// base64编码后，解码时，需要进行一个 Hex 解码，不然解码的内容等于空（大坑）
	const stringEncryptData = CryptoJS.format.Hex.parse(src.toString());
	const cipherOption = {
		mode: CryptoJS.mode.CBC,
		padding: CryptoJS.pad.Pkcs7,
		iv: iv,
	};
	let data = CryptoJS.AES.decrypt(stringEncryptData, key, cipherOption);
	return data.toString(CryptoJS.enc.Utf8);
}

const getTokenStorage = () => {
	let token = "";
	try {
		token = store.state.app.token || uni.getStorageSync("token");
	} catch (e) {}
	return token;
};

const http = new Request();
http.setConfig((config) => {
	/* 设置全局配置 */
	config.baseURL = HTTP_REQUEST_URL; /* 根域名不同 */
	config.header = {
		...config.header,
	};
	return config;
});
http.interceptors.request.use(
	(config) => {
		/* 请求之前拦截器。可以使用async await 做异步操作 */
		config.header = {
			...config.header,...HEADER
		};
		// if(config.custom.from){
		// 	   config.header['content-type']='application/x-www-form-urlencoded';
		// }
		// 12.9 修改代码
		// let isLogOff = uni.getStorageSync("isLogOff");
		// if (isLogOff) {
		// 	uni.showModal({
		// 		title: "提示",
		// 		content: "账号已注销，是否取消注销",
		// 		cancelText: "取消",
		// 		confirmText: "确定",
		// 		success: function(res) {
		// 			if (res.confirm) {
		// 				uni.setStorageSync("isLogOff", false);
		// 				uni.showToast({
		// 					title: "取消成功，请重新登录",
		// 					icon: "none",
		// 				});
		// 			}
		// 		},
		// 	});
		// 	return Promise.reject("");
		// }

		if (config.custom.auth) {
			if (!getTokenStorage()) {
				// 如果token不存在，return Promise.reject(config) 会取消本次请求
				uni.reLaunch({
					url: "/pages/login/login?login=true",
				});
				//去登录
				return Promise.reject("未登录");
			}
			config.header.Authorization = "Bearer " + getTokenStorage();
		}
		return config;
	},
	(config) => {
		return Promise.reject(config);
	}
);
http.interceptors.response.use(
	async (response) => {
			/* 请求之后拦截器。可以使用async await 做异步操作  */
			// response.data.data = JSON.parse(decrypt(response.data.data))
			if (response.statusCode == "200") {
				// 服务端返回的状态码不等于200，则reject()

				//    if(response.data.code == 'token.expire' || response.data.code == "token.invalid"){
				// 	uni.navigateTo({
				// 		url:'/pages/login'
				// 	})
				// 	return Promise.reject('登录过期')
				// }
				// uni.showToast({
				// 		icon:'none',
				// 		title:response.data.message
				// })
				if (response.data.code == 1) {
					return Promise.resolve(response.data);
				} else {
					if (response.data.code == -1) {
						try {
							store.commit("LOGOUT");
							uni.setStorageSync("token", "");
						} catch (err) {
							console.log(err, "[token过期]");
						}
						uni.reLaunch({
							url: "/pages/login/login?login=true",
						});
						return Promise.reject(response.data.info);
					} else {
						return Promise.reject(response.data.info);
					}
				}
			}
			return response.data;
		},
		(response) => {
			// 请求错误做点什么。可以使用async await 做异步操作
			return Promise.reject(response);
		}
);

export {
	http
};